	package br.com.JZSolution.domineduplex.rede.protocolo;

import java.io.EOFException;
import java.io.File;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

import br.com.JZSolution.domineduplex.DomineDuplex;
import br.com.JZSolution.domineduplex.gui.util.ComunicadorDeMensagens;
import br.com.JZSolution.domineduplex.modelo.InformacoesTransferencia;
import br.com.JZSolution.domineduplex.modelo.RespostaReceptor;

public class ProtocoloRecebimento {

	long tamanhoDoArquivo = 0;
	String hashArquivo = null;
	
	public File confirmarRecebimento(OutputStream output,InputStream input){
		try {

			ObjectInputStream ois = new ObjectInputStream(input);
			InformacoesTransferencia infoTransf = (InformacoesTransferencia)ois.readObject();
			
			tamanhoDoArquivo = infoTransf.getTamanhoArquivo();
			
			int opt = ComunicadorDeMensagens.aceitarArquivo(tamanhoDoArquivo, infoTransf.getNomeArquivo(), infoTransf.getNomeUsuario());

			boolean aceito;
			if (opt == 0){//sim aceito
				aceito = true;
			}else{//não aceito
				aceito = false;	
			}

			//envia a resposta de fato
			ObjectOutputStream oos = new ObjectOutputStream(output);
			oos.writeObject(new RespostaReceptor(aceito));
			
			if(aceito){
				//pega o hash para comparacao ao termino da transferencia
				hashArquivo = infoTransf.getHashArquivo();
				
				//retorna o arquivo a ser escrito
				return new File(DomineDuplex.getInstance().getDiretorioDeRecepcao()+
						File.separatorChar+ infoTransf.getNomeArquivo());
			}
		}catch (EOFException e) {
			System.out.println("Fluxo interrompido. EOF");
		}catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public long getTamanhoDoArquivo() {
		return tamanhoDoArquivo;
	}
	
	public String getHashArquivo() {
		return hashArquivo;
	}
}
